REM >Director:Menus.System.Modules

REM This makes a menu of all the modules
REM and version number of modules

REM x.xx Converted/Modified from original Modules
REM 1.00 13/11/95 R.Thickings Started

ON ERROR: ON ERROR OFF: ERROR ERR,REPORT$+" at "+STR$ ERL

XOS_Module=FNswi_number("XOS_Module")
Menu=FNswi_number("Director_Menu")
EndMenu=FNswi_number("Director_EndMenu")
Option=FNswi_number("Director_Option")
Command=FNswi_number("Director_Command")
Dash=FNswi_number("Director_Dash")

SYS Menu,"ModulesList -temp"

module%=0
instance%=0
REPEAT
  oldinstance%=instance%
  SYS XOS_Module,12,module%,instance% TO ,module%,instance%,base%,private%,prefix%;flag%
  ok%=(flag% AND 1)=0
  IF ok% THEN
    name$=FN0(base%+base%!&10)
    IF instance%<>0 OR oldinstance%<>0 THEN name$+="%"+FN0(prefix%)
    version$=FN0(base%+base%!&14)
    version$=RIGHT$(version$,LEN version$-INSTR(version$,CHR$9))
    WHILE LEFT$(version$,1)=CHR$9
      version$=RIGHT$(version$,LEN version$-1)
    ENDWHILE
    IF INSTR(version$,CHR$9) THEN version$=LEFT$(version$,INSTR(version$,CHR$9)-1)+" "
    version$=" "+LEFT$(version$,INSTR(version$," "))
    SYS Option,""""+name$+version$+""" -sub ""Dynamic:/Director:Menus.System.ModulesSub -do "+name$+""""
  ENDIF
UNTIL NOT ok%

SYS EndMenu,"-sort"

*Set Director$Menu ModulesList

END

DEF FNswi_number(name$)
  SYS "OS_SWINumberFromString",,name$ TO A%
=A%

DEF FN0(a%)
LOCAL m%:m%=255
s$=""
WHILE (?a%>=32 OR ?a%=9) AND m%<>0
 s$+=CHR$?a%
 a%+=1:m%-=1
ENDWHILE
=s$
